www.gusucode.com > Typesetter CMS v5.0.3PHP源码程序 > Typesetter CMS v5.0.3/Typesetter/Typesetter/include/thirdparty/Bootstrap/js/bootstrap-scrollspy.js

    !function(b) {
  function h(a, d) {
    var c = b.proxy(this.process, this), f = b(a).is("body") ? b(window) : b(a), g;
    this.options = b.extend({}, b.fn.scrollspy.defaults, d);
    this.$scrollElement = f.on("scroll.scroll-spy.data-api", c);
    this.selector = (this.options.target || (g = b(a).attr("href")) && g.replace(/.*(?=#[^\s]+$)/, "") || "") + " .nav li > a";
    this.$body = b("body");
    this.refresh();
    this.process();
  }
  h.prototype = {constructor:h, refresh:function() {
    var a = this;
    this.offsets = b([]);
    this.targets = b([]);
    this.$body.find(this.selector).map(function() {
      var d = b(this), d = d.data("target") || d.attr("href"), c = /^#\w/.test(d) && b(d);
      return c && c.length && [[c.position().top + (!b.isWindow(a.$scrollElement.get(0)) && a.$scrollElement.scrollTop()), d]] || null;
    }).sort(function(a, b) {
      return a[0] - b[0];
    }).each(function() {
      a.offsets.push(this[0]);
      a.targets.push(this[1]);
    });
  }, process:function() {
    var a = this.$scrollElement.scrollTop() + this.options.offset, b = (this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight) - this.$scrollElement.height(), c = this.offsets, f = this.targets, g = this.activeTarget, e;
    if (a >= b) {
      return g != (e = f.last()[0]) && this.activate(e);
    }
    for (e = c.length;e--;) {
      g != f[e] && a >= c[e] && (!c[e + 1] || a <= c[e + 1]) && this.activate(f[e]);
    }
  }, activate:function(a) {
    this.activeTarget = a;
    b(this.selector).parent(".active").removeClass("active");
    a = b(this.selector + '[data-target="' + a + '"],' + this.selector + '[href="' + a + '"]').parent("li").addClass("active");
    a.parent(".dropdown-menu").length && (a = a.closest("li.dropdown").addClass("active"));
    a.trigger("activate");
  }};
  var k = b.fn.scrollspy;
  b.fn.scrollspy = function(a) {
    return this.each(function() {
      var d = b(this), c = d.data("scrollspy"), f = "object" == typeof a && a;
      c || d.data("scrollspy", c = new h(this, f));
      if ("string" == typeof a) {
        c[a]();
      }
    });
  };
  b.fn.scrollspy.Constructor = h;
  b.fn.scrollspy.defaults = {offset:10};
  b.fn.scrollspy.noConflict = function() {
    b.fn.scrollspy = k;
    return this;
  };
  b(window).on("load", function() {
    b('[data-spy="scroll"]').each(function() {
      var a = b(this);
      a.scrollspy(a.data());
    });
  });
}(window.jQuery);